#ifndef NODEWIDGET_H
#define NODEWIDGET_H

#include <QWidget>
#include "common/deviceattributes.h"
class QToolButton;
class QComboBox;

/**
 * @brief NodeWidget
 * @details 用于展示设备节点的控件包装器，包含设备图标按钮与型号下拉框。
 */
class NodeWidget : public QWidget
{
    Q_OBJECT

public:
    /**
     * @brief NodeWidget::NodeWidget
     * @details 根据角色创建节点并初始化 UI。
     * @param type 设备角色。
     * @param parent Qt 父对象。
     */
    explicit NodeWidget(DeviceRole type, QWidget *parent = nullptr);

    // 提供一个公共接口来获取内部的 QLabel，以便主窗口可以访问它
    /**
     * @brief NodeWidget::getButton
     * @details 返回节点对应的按钮控件。
     * @return QToolButton 指针。
     */
    QToolButton *getButton() const;
    /**
     * @brief NodeWidget::getDeviceList
     * @details 获取当前下拉框内的全部设备名称列表。
     * @return 设备名称集合。
     */
    QStringList getDeviceList();
    /**
     * @brief NodeWidget::setDevice
     * @details 设置当前选中的设备名称。
     * @param device 目标设备。
     */
    void setDevice(const QString &device);
    /**
     * @brief NodeWidget::getDevice
     * @details 获取当前选中的设备名称。
     * @return 设备名称。
     */
    QString getDevice();
    /**
     * @brief NodeWidget::getDeviceRole
     * @details 返回节点对应的设备角色。
     * @return 设备角色。
     */
    DeviceRole getDeviceRole();
    /**
     * @brief NodeWidget::setConnectorIconImage
     * @details 根据连接器是否为衰减器设置不同图标。
     * @param isAttenuator 是否为衰减器图标。
     */
    void setConnectorIconImage(bool isAttenuator = true);
signals:
    /**
     * @brief NodeWidget::sig_itemChanged
     * @details 当设备下拉框内容变化时发射。
     * @param item 选中的设备名称。
     */
    void sig_itemChanged(const QString &item);
private slots:
    /**
     * @brief NodeWidget::slot_buttonToggled
     * @details 处理按钮勾选状态变化，联动下拉框可用性。
     * @param toggled 是否选中。
     */
    void slot_buttonToggled(bool toggled);

private:
    /**
     * @brief NodeWidget::initUI
     * @details 初始化界面布局与初始数据。
     */
    void initUI();

private:
    QToolButton *m_btn;
    QComboBox *m_comboBox;
    DeviceRole m_role;
};

#endif // NODEWIDGET_H
